/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller.all;

import dao.NguoidungDAO;
import java.sql.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.tanesha.recaptcha.ReCaptchaImpl;
import net.tanesha.recaptcha.ReCaptchaResponse;
import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import pojo.Nguoidung;
import pojo.Tinhtrang;

/** 
 *
 * @author BlueZky
 */
public class dangKyController extends SimpleFormController {

    public dangKyController() {
        //Initialize controller properties here or 
        //in the Web Application Context

        setCommandClass(Nguoidung.class);
        setCommandName("nguoidung");
        setFormView("All/dangky");
    }

    //Use onSubmit instead of doSubmitAction 
    //when you need access to the Request, Response, or BindException objects
    @Override
    protected ModelAndView onSubmit(
            HttpServletRequest request,
            HttpServletResponse response,
            Object command,
            BindException errors) throws Exception {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        ModelAndView mv = null;
        Nguoidung nguoiDung = (Nguoidung) command;
        String message = isValid(nguoiDung);
        String gioiTinh = request.getParameter("gender");

        // Lấy thông tin capcha từ request
        String remoteAddr = request.getRemoteAddr();
        ReCaptchaImpl reCaptcha = new ReCaptchaImpl();
        reCaptcha.setPrivateKey("6LcinsgSAAAAANc_pVTmCEL8lxeHmAucwl7DvMUh");
        String challenge = request.getParameter("recaptcha_challenge_field");
        String uresponse = request.getParameter("recaptcha_response_field");
        ReCaptchaResponse reCaptchaResponse = reCaptcha.checkAnswer(remoteAddr, challenge, uresponse);

        // Kiểm tra thông tin giới tính/
        if (gioiTinh == null || gioiTinh.length() == 0) {
            message += "<br/>Chưa chọn giới tính.";
        } else {
            nguoiDung.setGioitinh(gioiTinh);
        }

        // Kiểm tra capcha hợp lệ hay không
        if (!reCaptchaResponse.isValid()) {
            message += "<br/> Nhập sai mã xác thực";    
        }

        if (message.length() > 0) {
            mv = new ModelAndView("All/dangky");
            mv.addObject("message", message);
            mv.addObject(command);
            return mv;
        } else {
            String reEmail = request.getParameter("reEmail");
            String reMatKhau = request.getParameter("reMatkhau");
            String ngaySinh = request.getParameter("ngaysinh");
            Date dat = null;


            // Chuyển ngày sinh sang định dạng đúng
            if (ngaySinh != null && ngaySinh.length() > 0) {
                try {
                    String[] tmp = ngaySinh.split("/");
                    ngaySinh = tmp[2] + "-" + tmp[1] + "-" + tmp[0];
                    dat = Date.valueOf(ngaySinh);
                    System.out.println(dat.toString());
                } catch (Exception ex) {
                    System.out.println(ex.getMessage());
                    dat = null;
                }
            }
            nguoiDung.setNgaysinh(dat);

            if (reEmail == null || reEmail.length() == 0 || reEmail.compareTo(nguoiDung.getEmail()) != 0) {
                message = "Địa chỉ Email không trùng.";
            } else if (reMatKhau == null || reMatKhau.length() == 0 || reMatKhau.compareToIgnoreCase(nguoiDung.getMatkhau()) != 0) {
                message = "Mật khẩu không trùng";
            } else if (NguoidungDAO.kiemTraNguoiDung(nguoiDung.getTendangnhap())) {
                message = "Tên đăng nhập " + nguoiDung.getTendangnhap() + " đã tồn tại";
            } else {
                nguoiDung.setTinhtrang(new Tinhtrang(1));
                if (NguoidungDAO.themNguoiDung(nguoiDung)) {
                    mv = new ModelAndView("All/dangnhap");
                    mv.addObject("message", "Bạn đã đăng ký thành công, đăng nhập để vào trang tài khoản");
                    return mv;
                } else {
                    message = "Đăng ký thất bại";
                }
            }

            mv = new ModelAndView("All/dangky");
            mv.addObject("message", message);
            mv.addObject(command);
            return mv;
        }
        //return mv;
    }

    /**
     * Kiểm tra thông tin nhập vào có hợp lệ hay không
     * @param nguoiDung: Đối tượng chứa thông tin người dùng
     * @return Chuỗi chứa thông báo lỗi nếu có.
     */
    private String isValid(Nguoidung nguoiDung) {
        String message = "";

        // Kiểm tra tên đăng nhập
        if (nguoiDung.getTendangnhap() == null || nguoiDung.getTendangnhap().length() == 0) {
            message += "<br/>Điền tên đăng nhập.";
        } else if (nguoiDung.getEmail() == null || nguoiDung.getEmail().length() == 0) {
            message += "<br/>Nhập địa chỉ email.";
        } else if (nguoiDung.getMatkhau() == null || nguoiDung.getMatkhau().length() == 0) {
            message += "<br/>Điền mật khẩu.";
        } else if (nguoiDung.getNgaysinh() == null) {
            message += "<br/>Nhập ngày sinh.";
        } else if (nguoiDung.getHoten() == null || nguoiDung.getHoten().length() == 0) {
            message += "<br/>Nhập họ tên đầy đủ";
        } else if (nguoiDung.getDiachi() == null || nguoiDung.getDiachi().length() == 0) {
            message += "<br/>Nhập địa chỉ";
        } else if (!nguoiDung.getSodienthoai().matches("^[0-9]*$")) {
            message += "<br/>Số điện thoại không hợp lệ";
        }
        return message;
    }
}
